package br.academia.arq.dao;

import java.util.Collection;
import java.util.HashMap;

import org.hibernate.HibernateException;
import org.hibernate.Query;

import br.academia.arq.erros.DAOException;
import br.academia.dominio.AvaliacaoFisica;
import br.academia.util.Validador;


/**
 * Dao com operações referentes a AvaliacaoFisica
 * @see AvaliacaoFisica
 */
public class AvaliacaoFisicaDAO extends GenericDAO{
	
	/**
	 * Método que retorna itens que tenham nome ou descrição parecidos
	 * com os itens do ideal passado como parâmetro
	 * @param ideal
	 * @return
	 * @throws HibernateException
	 * @throws DAOException
	 */
	public Collection<AvaliacaoFisica> findAvaliacaoFisicaLike(AvaliacaoFisica avaliacaoFisica) throws HibernateException, DAOException{
		String hql = "select m from AvaliacaoFisica m where 1 = 1 ";
		HashMap<String, Object> parametros = new HashMap<String, Object>();
			
		if(!Validador.isEmpty(avaliacaoFisica.getObjetivo())){
			hql += " and m.objetivo like :objetivo ";
			parametros.put("objetivo", "%" + avaliacaoFisica.getObjetivo() + "%");
		}
		
		if(!Validador.isEmpty(avaliacaoFisica.getObjetivo())){
			hql += " and m.observacoes like :observacoes ";
			parametros.put("observacoes", "%" + avaliacaoFisica.getObservacoes() + "%");
		}
		if(!Validador.isEmpty(avaliacaoFisica.getAluno())){
			hql += " and m.aluno.id = :aluno ";
			parametros.put("aluno", avaliacaoFisica.getAluno().getId());
		}
		
		if(!Validador.isEmpty(avaliacaoFisica.getFuncionario())){
			hql += " and m.funcionario.id = :funcionario ";
			parametros.put("funcionario", avaliacaoFisica.getFuncionario().getId());
		}
		
		if(!Validador.isEmpty(avaliacaoFisica.getDataCadastro())){
			hql += " and m.dataCadastro = :dataCadastro ";
			parametros.put("dataCadastro", avaliacaoFisica.getDataCadastro());
		}
		
		Query q = getSession().createQuery(hql);
		
		setParametros(parametros, q);
		
		@SuppressWarnings("unchecked")
		Collection<AvaliacaoFisica> avaliacaoFisicas = q.list();
		
		return avaliacaoFisicas;
	}
}
